package a0.commonAPI.Math;

import a0.commonAPI.Math.MatchUtils.MathUtils;
import org.junit.Test;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 作业：
 *  两个double类型的数据的 +*-/ 运算 并返回double数据类型（3位小数,四舍五入）
 *
 *  两个float类型的数据的 +*-/ 运算 并返回float数据类型（2位小数，向下取整）
 */

public class BigDeciDemo {

    /**
     * 为什么使用BigDecimal
     *     解决float和double数据计算丢失精度的问题
     */
    @Test
    public void test3() {

        double result = 1.0d - 0.9f;
        System.out.println(result);

    }

    @Test
    public void test4() {

        //https://www.cnblogs.com/yingchen/p/5459501.html
        //https://blog.csdn.net/qq_39101581/article/details/78624617
        /**
         * 不要使用类型为float或double的参数创建BigDecimal对象(丢失精度)
         * 使用String类型的参数
         */

        BigDecimal f1 = new BigDecimal(1.745f);
        BigDecimal d2 = new BigDecimal(0.745d);
        System.out.println(f1);

        BigDecimal b1 = new BigDecimal("1.745");
        BigDecimal b2 = new BigDecimal("0.745");


        //b1 = b1.setScale(2, BigDecimal.ROUND_HALF_UP);
        //b2 = b2.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println("bdTest:" + b1); // 1.75
        System.out.println("bdTest1:" + b2); // 0.74

        b1 = b1.setScale(2, BigDecimal.ROUND_UP);
        b2 = b2.setScale(2, BigDecimal.ROUND_UP);
        System.out.println("bdTest:" + b1); // 1.75
        System.out.println("bdTest1:" + b2); // 0.74

    }

    /**
     * 计算
     */
    @Test
    public void test() {


        BigDecimal b1 = new BigDecimal("8456.74336");
        BigDecimal b2 = new BigDecimal("256");

        BigDecimal add = b1.add(b2);
        System.out.println(add);

        BigDecimal subtract = b1.subtract(b2);
        System.out.println(subtract);

        BigDecimal multiply = b1.multiply(b2);
        System.out.println(multiply);

        BigDecimal divide = b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);

        System.out.println(new DecimalFormat("0.0").format(multiply));
        System.out.println(new DecimalFormat("#").format(multiply));
        System.out.println(new DecimalFormat("#.##%").format(multiply));


    }

    @Test
    public void test2() {
        BigDecimal bigDecimal = new BigDecimal("256.36");


    }

    @Test
    public void test7() {
        double x = 2898.545456;
        double y = 5.25;
        System.out.println(MathUtils.dAdd(x,y));
        System.out.println(MathUtils.dSubtract(x,y));
        System.out.println(MathUtils.dMultiply(x,y));
        System.out.println(MathUtils.dDivide(x,y));

        System.out.println(MathUtils.str());


    }


}
